package com.lemon.controller;


import com.lemon.entity.Student;
import com.lemon.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 每个类 作者一定不能少
 * <p>
 * 在 Controller 类上，@RequestMapping() 一定不能少,如果你的 Controller 多个,万一路径冲突了怎么办
 * 看到了吗  RestController = @ResponseBody + Controller 意味着每个方法都是返回查询结果不跳转页面,这点要注意区分
 *
 * 测试提交代码.你试试提交一次代码
 * 看一次不会啊  我得看文档自己多操作几遍
 * 在提交一次
 *
 * @author Levin
 */
@RestController
@RequestMapping("/students")
public class StudentController {

    /**
     * 这也是一种注入方式,构造器注入,Bean 有 set 注入 构造器注入 和 （忘了）
     * <p>
     * 在Spring4.x 以后,推荐这种注入方式,更加优雅安全
     */
    private final StudentService studentService;

    @Autowired
    public StudentController(StudentService studentService) {
        this.studentService = studentService;
    }

    /**
     * 划重点了,     @ResponseBody = 返回什么就是什么  返回的是数据 而不是 视图资源
     * <p>
     * 规划重点了   当一个类都是接口而不返回页面的时候 可以注解结合（Spring4的新特性，后面教，你现在的版本是3.2）
     * <p>
     * ==== Spring 4.3 新特性
     * <p>
     * RequestMapping(method = RequestMethod.GET) = GetMapping
     *
     * 这杨看起来是不是感觉代码清爽很多,而且层次分明 语义清晰直观,其实现在JAVA很多都封装好了
     * 几乎0配置 很容易学了 -
     */

    @GetMapping
    public List<Student> query() {
        return this.studentService.queryStudentForList();
    }

    @GetMapping("/{id}")
    public Student selectById(@PathVariable("id") Integer id) {
        // 在 REST FUL 风格中,要体现路径的意义
        return this.studentService.selectStudentById(id);
    }

}
